/*
 * Buffer.h
 *
 *  Created on: 06/10/2009
 *      Author: hernan
 */

#ifndef BUFFER_H_
#define BUFFER_H_

#include "Almacenamiento.h"
#include <string.h>
#include <list>
#include <time.h>


using namespace std;

typedef struct {

	string cadena;

	time_t timeStamp;

	long int offset;

	// Indica si la posicion actual del buffer fue o no persistida
	bool indicadorPersistido;

}NodoBuffer;

class Buffer: public Almacenamiento {

   private: long int offset;

   private:	int tamaniobuffer;

   private: list <NodoBuffer> buffer;

   public: Buffer();

   // Funcion que devuelve la cadena de la posicion "pos" de la lista de buffer
   // Si la posicion no existe devuelve NULL

   public: virtual string Read(int pos);


   //Funcion que ingresa al final de la lista de buffer la cadena ingresada por parametro

   public: virtual int saveData(string data, int posicion);;


   public: ~Buffer();


   //Funcion que elimina la posicion "pos" de la lista del buffer

   public: virtual void deleteData(int pos);

   public: virtual void clean();

   public: virtual int GetTamanio();

   public: virtual time_t GetTimeStamp();

   public: virtual void Limpiar();

   public: virtual string getData(int position);

   public: virtual void SetPosicion(long int pos);

   public: virtual void updateData(int position, string data);

   public: virtual void markPersisted(int position);

   public: virtual int getOldData();


	/*
	* Metodo que salva en buffer y devuelve en que lugar de dicha
	* estructura se guardo la informacion
	*/
//	public: virtual int saveData(Dato *data);


	/**
	* Metodo que borra de la estructura Buffer el dato alojado en la posicion
	* indicada por el parametro position
	*/
//	public: virtual void deleteData(int position);


	/**
	* Metodo que actualiza los datos alojados en la posicion pasada por parametro
	* con los datos del parametro data
	*/
//	public: virtual void updateData(int position,Dato *data);


	/**
	* Metodo que, previamente consultando al indice sobre un dato y devolviendo este una posicion al archivo * buffer, devuelve
	* el dato en cuestion.
	*/
//	public: virtual Dato* getData(int position);


};

#endif /* BUFFER_H_ */
